#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <stdlib.h>
#include <netdb.h>
#include <unistd.h>
#include <strings.h>
#include <string.h>

void error(char *msg)
{
	perror(msg);
	exit(1);
}

int main(int argc, char *argv[])
{
	int sockfd, portno, n;
	struct sockaddr_in serv_addr;
	struct hostent *server;
	char buffer[256];

	/* Verifying command line arguments  */
	if(argc < 3) {
		fprintf(stderr,"usage: %s <serverip> <port>\n",argv[0]);
		exit(0);
	}

	/* Set server structure and port  */
	server = gethostbyname(argv[1]);
	if (server == NULL) {
		fprintf(stderr, "ERROR: Hostname");
		exit(1);
	}
	portno = atoi(argv[2]);

	/* Create client socket  */
	sockfd = socket(AF_INET, SOCK_STREAM, 0);
	if(sockfd < 0)
		error("ERROR: Failed to create client socket\n");

	/* Flush the server structure and set values  */
	bzero((char *) &serv_addr, sizeof(serv_addr));
	serv_addr.sin_family = AF_INET;
	bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr, server->h_length);
	serv_addr.sin_port = portno;

	/* Connect to the server  */
	if (connect(sockfd, (struct sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
		error("ERROR: Connecting to the server\n");

	/* Get message from user and send it to the server */
	printf("Enter you message: ");
	bzero(buffer, 256);
	fgets(buffer, 255, stdin);

	n = write(sockfd, buffer, strlen(buffer));
	if(n < 0)
		error("ERROR: Writing to socket\n");

	/* Get responce from the server and display it to the user  */
	bzero(buffer, 256);
	n = read(sockfd, buffer, 255);
	if(n < 0)
		error("ERROR: Reading server responce from the socket\n");
	printf("%s\n", buffer);

	return 0;
}
